[小ネタ]CloudFormationでVPCを作成する時に指定したCIDRは正規形式に変更されます

[小ネタ]CloudFormationでVPCを作成する時に指定したCIDRは正規形式に変更されます

Clock Icon2024.03.08

こんにちは。
繁松です。

はじめに

CloudFormationでVPCを作成する際に指定したCIDRと異なるVPCが作成されたことはありませんか?

CloudFormationでVPCを作成する際に正規形式ではないCIDRを指定した場合、正規形式に変更されVPCが作成されます。
例1:[100.68.0.18/18]を指定した場合、[100.68.0.0/18]に変更される(ドキュメント記載の例)
例2:[10.0.17.0/23]を指定した場合、[10.0.16.0/23]に変更される

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-vpc.html#aws-resource-ec2-vpc-properties

※本ブログではVPCで設定される正しいIP CIDRのことをAWSドキュメントに合わせて正規形式と表現しています。

コマンドラインツールまたは Amazon EC2 API を使用して VPC を作成すると、CIDR ブロックは自動で正規形式に変更されます。例えば、CIDR ブロックに 100.68.0.18/18 を指定した場合、100.68.0.0/18 の CIDR ブロックが作成されます。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-cidr-blocks.html#vpc-sizing-ipv4

やってみた

CloudFormationで確認

以下のCloudFormationテンプレートを使って確認してみます。
Parameters セクションでVPC CIDRを入力できるようにしています。

  
AWSTemplateFormatVersion: "2010-09-09"  
  
Parameters:  
  VpcCidrBlock:  
    Type: String  
    AllowedPattern: '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$'  
  
Resources:  
# VPC Create  
  Vpc:  
    Type: AWS::EC2::VPC  
    Properties:  
      CidrBlock: !Ref VpcCidrBlock  
      Tags:  
        - Key: Name  
          Value: test-vpc  

AWSのドキュメントに例として記載されているIPアドレス[100.68.0.18/18]を入力し作成します。

CloudFormationの実行は成功しVPCのCIDRは[100.68.0.0/18]で作成されています

補足

作成したVPCのIPアドレスはAWSドキュメントの例として記載されている[100.68.0.18/18]で作成しましたが、VPCのIPアドレスはプライベートIPアドレスの利用が推奨されています。

  • 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
  • 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
  • 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)

Amazon VPC IPアドレス設計レシピ

AWSコンソールで確認

コンソールからVPCを作成する場合に正規形式ではないCIDRを指定するとエラーとなり作成できません。

さいごに

正規形式ではないCIDRの場合、コンソールからではエラーになるのでCloudFormationでもエラーになりそうですが正規形式に変更され作成されます。
CloudFormationで設定したパラメータと異なるCIDRでVPCが作成された際には指定したCIDRが正規形式になっているか確認してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.